flag_verbose: bool,
flag_bin: bool,
arg_path: String,
+ flag_name: Option<String>,
flag_vcs: Option<ops::VersionControl>,
}
control system (git or hg) or do not initialize any version
control at all (none) overriding a global configuration.
--bin Use a binary instead of a library template
+ --name <name> Set the resulting package name
-v, --verbose Use verbose output
";
debug!("executing; cmd=cargo-new; args={:?}", env::args().collect::<Vec<_>>());
config.shell().set_verbose(options.flag_verbose);
- let Options { flag_bin, arg_path, flag_vcs, .. } = options;
+ let Options { flag_bin, arg_path, flag_name, flag_vcs, .. } = options;
let opts = ops::NewOptions {
version_control: flag_vcs,
- path: &arg_path,
bin: flag_bin,
+ path: &arg_path,
+ name: flag_name.as_ref().map(|s| s.as_ref()),
};
ops::new(opts, config).map(|_| None).map_err(|err| {
pub version_control: Option<VersionControl>,
pub bin: bool,
pub path: &'a str,
+ pub name: Option<&'a str>,
}
impl Decodable for VersionControl {
return Err(human(format!("Destination `{}` already exists",
path.display())))
}
- let name = try!(path.file_name().and_then(|s| s.to_str()).chain_error(|| {
- human(&format!("cannot create a project with a non-unicode name: {:?}",
- path.file_name().unwrap()))
- }));
- let name =
- if opts.bin {
- name
- } else {
- strip_rust_affixes(name)
- };
+ let name = match opts.name {
+ Some(name) => name,
+ None => {
+ let dir_name = try!(path.file_name().and_then(|s| s.to_str()).chain_error(|| {
+ human(&format!("cannot create a project with a non-unicode name: {:?}",
+ path.file_name().unwrap()))
+ }));
+ if opts.bin {
+ dir_name
+ } else {
+ strip_rust_affixes(dir_name)
+ }
+ }
+ };
for c in name.chars() {
if c.is_alphanumeric() { continue }
if c == '_' || c == '-' { continue }